/*******************************************************************************
 *     SDR Trunk 
 *     Copyright (C) 2014 Dennis Sheirer
 * 
 *     This program is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * 
 *     This program is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 * 
 *     You should have received a copy of the GNU General Public License
 *     along with this program.  If not, see <http://www.gnu.org/licenses/>
 ******************************************************************************/
package io.github.dsheirer.edac;

import java.util.BitSet;

/**
 * Calculates a 7-bit checksum using an array of xor values from the 
 * ChecksumType class
 */
public class Checksum
{
	public static boolean validate7BitChecksum( BitSet message,
									byte messageChecksum,
									ChecksumType checksumType )
	{
		return ( messageChecksum & get7BitChecksum( message, checksumType ) ) == 0;
	}

	public static byte get7BitChecksum( BitSet message, 
									ChecksumType checksumType )
	{
		byte checksum = 0x00;

		short[] checkValues = checksumType.getValues();
		
		for( int x = 0; x < checkValues.length; x++ )
		{
			if( message.get( x ) )
			{
				checksum ^= checkValues[ x ];
			}
		}
		
		return checksum;
	}
}
